/**
 * 大数加法
 * 以字符串的形式读入两个数字s和t，编写一个函数计算它们的和，以字符串形式返回。
 * s和t的长度 小于等于 100000，字符串仅有 0-9 构成
 * 要求：时间复杂度 
*/

//方案1
function solve(s, t) {
    // write code here
    return (BigInt(s) + BigInt(t)).toString() // 用 BigInt 直接转下就好了
}

console.log(solve(99999, 999990))

//方案二
function solveTwo(s, t) {
    let carry = 0, res = '';
    let sArr = s.split(''), tArr = t.split('');
    while (sArr.length || tArr.length) {
        let num = Number(sArr.pop() || 0) + Number(tArr.pop() || 0) + carry;
        if (num > 9) {
            carry = 1;
            num = num % 10
        } else {
            carry = 0;
        }
        res = num + res;
    }
    if (carry) {
        res = carry + res;
    }
    return res;
}
console.log(solveTwo("99999", "999990"))

//方案三
function solveThree( s ,  t ) {
    // write code here
    // 首先取出大数中长度最长的
    let maxLength = Math.max(s.length,t.length);
    // 用0 补齐长度
    s = s.padStart(maxLength,0);
    t = t.padStart(maxLength,0);
    // 定义加法过程中需要用到的变量
    let a = 0;
    let b = 0; //进位
    let sum = "";
    for( let i = maxLength - 1; i >=0; i--){
        a = parseInt(s[i]) + parseInt(t[i]) + b;
        b = Math.floor(a/10);
        sum = a%10 + sum;
    }
    if( b == 1){
        sum = "1" + sum;
    }
    return sum;
}
console.log(solveThree("99999", "999990"))